# 全国疫情地图

import json

from pyecharts.charts import Map
from pyecharts.options import *


def get_map_data(file_name):
    with open(file_name, 'r', encoding='utf-8') as f:
        file_str = f.read()
        file_json = json.loads(file_str)
        province_data_list = file_json['areaTree'][0]['children']
        result = []
        for item in province_data_list:
            province_name = item['name']
            province_confirm = item['total']['confirm']
            result.append((rename_province(province_name), province_confirm))
        return result


def rename_province(province_name):
    """
    根据给定的省份名称，将其转换为正式的行政区划名称。

    参数:
    - province_name: 字符串，表示省份的名称。

    返回值:
    - 返回转换后的省份名称。对于中国内地的省份，会添加“省”、“自治区”或“特别行政区”后缀；对于已知的特别行政区或自治区，会返回其正式名称。
    """
    # 对于中国内地的特定省份，返回其正式名称
    if province_name == '北京':
        return '北京市'
    elif province_name == '天津':
        return '天津市'
    elif province_name == '上海':
        return '上海市'
    elif province_name == '重庆':
        return '重庆市'

    # 对于中国内地的自治区，返回其正式名称
    if province_name == '内蒙古':
        return '内蒙古自治区'
    elif province_name == '广西':
        return '广西壮族自治区'
    elif province_name == '西藏':
        return '西藏自治区'
    elif province_name == '宁夏':
        return '宁夏回族自治区'
    elif province_name == '新疆':
        return '新疆维吾尔自治区'

    # 对于特别行政区，返回其正式名称
    elif province_name == '香港':
        return '香港特别行政区'
    elif province_name == '澳门':
        return '澳门特别行政区'

    # 对于未特别指定的省份，返回原名称加上“省”后缀
    return province_name + '省'



if __name__ == '__main__':
    file_name = '../static/疫情.txt'
    map_data = get_map_data(file_name)

    map = Map()
    map.add('全国疫情地图', map_data, 'china')
    map.set_global_opts(
        title_opts=TitleOpts(title='全国疫情地图'),
        visualmap_opts=VisualMapOpts(is_show=True, is_piecewise=True,
                                     pieces=[
                                         {"min": 1, "max": 9, "label": "1-9人", "color": "#CCFFFF"},
                                         {"min": 10, "max": 99, "label": "10-99人", "color": "#FFFF99"},
                                         {"min": 100, "max": 499, "label": "99-499人", "color": "#FF9966"},
                                         {"min": 500, "max": 999, "label": "499-999人", "color": "#FF6666"},
                                         {"min": 1000, "max": 9999, "label": "1000-9999人", "color": "#CC3333"},
                                         {"min": 10000, "label": "10000以上", "color": "#990033"}
                                     ])
    )
    map.render('../output/全国疫情地图.html')
